<?php

class CorrelativosFacsController extends AppController {
    var $name = 'CorrelativosFacs';
    var $uses = array('Factura','TiendaLocal','Documento');
    var $components = array('Utilitario','Interfaz','Vista','Maestro', 'Util');
    var $helpers = array('Html','Ajax','Javascript','Vista','Interfaz');
    var $layout = "ajax";

    function beforeFilter(){
        $this->validar();
    }
    
    function index($busq = null) {
        $this->permisos_menu_individual('CORRELATIVOS DE FACTURAS');
        $this->bloquear_buscador();
        $this->Vista->title("Tiendas - Correlativos de Facturas");
    }
    
    public function filtro() {
        $this->permisos_accion_individual('CORRELATIVOS DE FACTURAS', 'FILTRO');
        $tiendas = $this->Session->read('tiendas_disponibles');
        $listaTiendas = $this->Maestro->listar_tienda_usuarios($tiendas);
        $listaTiendasPermitidas = $this->Util->tiendasActivas($listaTiendas);
        $this->set('listaTiendas', $listaTiendasPermitidas);
    }
    
    public function busqueda_filtro() {
        $this->permisos_menu_individual('CORRELATIVOS DE FACTURAS');
        extract($this->request->data);
        if (empty($nrofactura)) {
            $this->Vista->mensaje('Indique al menos una Factura', 'ERROR');
            $this->set('data', null);
        }else if (empty($nrocontrol)) {
            $this->Vista->mensaje('Indique al menos un numero de control', 'ERROR');
            $this->set('data', null);
        }else if (empty($tienda)) {
            $this->Vista->mensaje('Seleccione una tienda', 'ERROR');
            $this->set('data', null);
        }else {
            $num_fac = explode("\n", $nrofactura);
            $count_fac = count($num_fac);
            $num_con = explode("\n", $nrocontrol);
            $count_con = count($num_con);
            $es_num = true;
            for ($i=0;$i<count($num_fac);$i++) {
                if (is_numeric($num_fac[$i]))
                    $es_num = false;
            }
            if($es_num == true){
                if($count_fac != $count_con){
                    $this->Vista->mensaje("<font color=\"red\"><b>$count_fac Lineas</b></font> Cant. Numero de Facturas != <font color=\"red\"><b>$count_con lineas</b></font> Cant. Numero de Control", 'ERROR');
                    $this->set('data', null);
                    $this->set('num_con_nueva', null);
                }else{
                    $filter_fac = array_filter($num_fac);//array_filter() quita los registros vacios facturas
                    $filter_con = array_filter($num_con);//array_filter() quita los registros vacios nro control
                    if(count($filter_fac) == count($filter_con)){ $z=''; $cont=0;
                        for($j=0;$j<count($filter_fac);$j++){
                            if(!empty($filter_fac[$j]) && !empty($filter_con[$j])){
                                $factura[]="";
                                $fac = explode("-", trim($num_fac[$j]));
                                $VeriFac = $this->TiendaLocal->find('first', array('fields' => 'codigo', 'conditions' => array('id' => $tienda)));
                                if($VeriFac['TiendaLocal']['codigo'] == "T$fac[0]"){ //verificar que la factura sea de esa tienda
                                    $factura[$j] = "FAC-".$fac[0].str_pad($fac[1],18,"0",STR_PAD_LEFT); //rellenando las facturas con 0 a la cant de caracteres FAC-001000000000000000123
                                    $nro_con[$j] = $fac[0]."-".str_pad(trim($filter_con[$j]),21,"0",STR_PAD_LEFT); //rellenando los nros control con 0 a la cant de caracteres 001-000000000000000000123
                                }else{
                                    $this->Vista->mensaje("La Factura <font color=\"red\"><b> $num_fac[$j]</b></font> no se encuentra en esta tienda!", 'ERROR');
                                    $z=$z.$j.",";
                                    $cont=$cont+1;
                                }
                            }else{
                                $this->Vista->mensaje("Hay un registro en blanco!", 'ERROR');
                                $this->set('data', null);
                            }
                        }
                        if($j!==$cont){
                            $w = explode(",", $z);
                            for($c=0;$c<count(array_filter($w));$c++){
                                unset($nro_con[$w[$c]]); //eliminar los num_control donde la factura no es de la misma tienda o no existe
                            }
                            $nro_con=array_values($nro_con); //reordenando el indice del array
                        }else{
                            $nro_con=null;
                        }
                        $NombreTienda = $this->TiendaLocal->find('first', array('fields' => 'codigo', 'conditions' => array('id' => $tienda)));
                        $StringFactura= str_replace(" ","'",implode(" , ", $factura));
                        $sql= "SELECT id, '".$NombreTienda['TiendaLocal']['codigo']."' Tienda, numero, numero_control, monto, TO_CHAR(fecha, 'DD-MM-YYYY') as fecha FROM facturas WHERE numero IN ('$StringFactura') ORDER BY id";
                        $data = $this->Maestro->sql_puntos($sql, $tienda, '%tienda_id%');
                        if(!empty($data)){
                            $this->set('data', $data[$tienda]);
                            $this->set('num_con_nueva', $nro_con);
                            $this->set('idtienda', $tienda);
                        }else{
                            $this->Vista->mensaje("<font color=\"red\"><b> No se encontraron las facturas!</b></font>", 'ERROR');
                            $this->set('data', null);
                            $this->set('num_con_nueva', null);
                            $this->set('idtienda', null);
                        }
                    }else{
                        $this->Vista->mensaje("<font color=\"red\"><b> Cant. Nro. Facturas != Cant. Nro. Control</b></font>, hay un registro vacio!", 'ERROR');
                        $this->set('data', null);
                    }
                }
            }else{
                $this->Vista->mensaje("No se puede procesar, hay letras en los campos ", 'ERROR');
                $this->set('data', null);
            }
        }
 
        if(empty($this->request->data)){
            $this->set('data', null);
            $this->render("../" . PRINCIPAL . "/mensajes");
        }
    }

    public function cambiar($tienda, $id, $nrocontrol, $div) {
        $this->permisos_opcion_individual('CORRELATIVOS DE FACTURAS', 'ESTATUS', 'MODIFICAR');
        if (!empty($id) && !empty($nrocontrol)) {
            $BdPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos', 'conditions' => array('TiendaLocal.id' => $tienda)));
            $BdPunto = $BdPunto['TiendaLocal']['base_datos'];
            $ObjFact = $this->Maestro->modelo('punto', 'Factura', $BdPunto);
            $data['Factura']['id']=$id;
            $data['Factura']['numero_control']=$nrocontrol;
            
            if($ObjFact->save($data)){
                echo "<script>document.getElementById('$div').removeAttribute('onclick'); document.getElementById('$div').childNodes[0].setAttribute('src', \"/img/iconos/icons/accept.png\"); document.getElementById('$div').childNodes[0].setAttribute('title', 'Procesado'); document.getElementById('$div').childNodes[0].setAttribute('alt', 'Procesado');</script>";
            }else{
                $this->Vista->mensaje("No se pudo actualizar el registro", 'ERROR');
            }
        } else {
            $this->Vista->mensaje("Hay algun campo vacio", 'ERROR');
        }
        $this->render("../" . PRINCIPAL . "/mensajes");
    }
}
?>